#include "BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.h"
#ifdef __cplusplus
extern "C" {
#endif
btSolve2LinearConstraint* bullet_NewbtSolve2LinearConstraint(double tau,double damping){
	btScalar c_arg_tau=tau;
	btScalar c_arg_damping=damping;
	btSolve2LinearConstraint* wrap_out = new btSolve2LinearConstraint(c_arg_tau,c_arg_damping);
	return wrap_out;
}

void bullet_btSolve2LinearConstraint_resolveBilateralPairConstraint(btSolve2LinearConstraint* c_this,btRigidBody* body0,btRigidBody* body1,btMatrix3x3* world2A,btMatrix3x3* world2B,btVector3* invInertiaADiag,double invMassA,btVector3* linvelA,btVector3* angvelA,btVector3* rel_posA1,btVector3* invInertiaBDiag,double invMassB,btVector3* linvelB,btVector3* angvelB,btVector3* rel_posA2,double depthA,btVector3* normalA,btVector3* rel_posB1,btVector3* rel_posB2,double depthB,btVector3* normalB,double* imp0,double* imp1){
	btRigidBody * c_arg_body0=(btRigidBody *)(void*)(body0);
	btRigidBody * c_arg_body1=(btRigidBody *)(void*)(body1);
	btMatrix3x3 const& c_arg_world2A=(btMatrix3x3 const&)(*world2A);
	btMatrix3x3 const& c_arg_world2B=(btMatrix3x3 const&)(*world2B);
	btVector3 const& c_arg_invInertiaADiag=(btVector3 const&)(*invInertiaADiag);
	btScalar const c_arg_invMassA=invMassA;
	btVector3 const& c_arg_linvelA=(btVector3 const&)(*linvelA);
	btVector3 const& c_arg_angvelA=(btVector3 const&)(*angvelA);
	btVector3 const& c_arg_rel_posA1=(btVector3 const&)(*rel_posA1);
	btVector3 const& c_arg_invInertiaBDiag=(btVector3 const&)(*invInertiaBDiag);
	btScalar const c_arg_invMassB=invMassB;
	btVector3 const& c_arg_linvelB=(btVector3 const&)(*linvelB);
	btVector3 const& c_arg_angvelB=(btVector3 const&)(*angvelB);
	btVector3 const& c_arg_rel_posA2=(btVector3 const&)(*rel_posA2);
	btScalar c_arg_depthA=depthA;
	btVector3 const& c_arg_normalA=(btVector3 const&)(*normalA);
	btVector3 const& c_arg_rel_posB1=(btVector3 const&)(*rel_posB1);
	btVector3 const& c_arg_rel_posB2=(btVector3 const&)(*rel_posB2);
	btScalar c_arg_depthB=depthB;
	btVector3 const& c_arg_normalB=(btVector3 const&)(*normalB);
	btScalar& c_arg_imp0=(btScalar&)(*imp0);
	btScalar& c_arg_imp1=(btScalar&)(*imp1);
	c_this->resolveBilateralPairConstraint(c_arg_body0,c_arg_body1,c_arg_world2A,c_arg_world2B,c_arg_invInertiaADiag,c_arg_invMassA,c_arg_linvelA,c_arg_angvelA,c_arg_rel_posA1,c_arg_invInertiaBDiag,c_arg_invMassB,c_arg_linvelB,c_arg_angvelB,c_arg_rel_posA2,c_arg_depthA,c_arg_normalA,c_arg_rel_posB1,c_arg_rel_posB2,c_arg_depthB,c_arg_normalB,c_arg_imp0,c_arg_imp1);
}

void bullet_btSolve2LinearConstraint_resolveUnilateralPairConstraint(btSolve2LinearConstraint* c_this,btRigidBody* body0,btRigidBody* body1,btMatrix3x3* world2A,btMatrix3x3* world2B,btVector3* invInertiaADiag,double invMassA,btVector3* linvelA,btVector3* angvelA,btVector3* rel_posA1,btVector3* invInertiaBDiag,double invMassB,btVector3* linvelB,btVector3* angvelB,btVector3* rel_posA2,double depthA,btVector3* normalA,btVector3* rel_posB1,btVector3* rel_posB2,double depthB,btVector3* normalB,double* imp0,double* imp1){
	btRigidBody * c_arg_body0=(btRigidBody *)(void*)(body0);
	btRigidBody * c_arg_body1=(btRigidBody *)(void*)(body1);
	btMatrix3x3 const& c_arg_world2A=(btMatrix3x3 const&)(*world2A);
	btMatrix3x3 const& c_arg_world2B=(btMatrix3x3 const&)(*world2B);
	btVector3 const& c_arg_invInertiaADiag=(btVector3 const&)(*invInertiaADiag);
	btScalar const c_arg_invMassA=invMassA;
	btVector3 const& c_arg_linvelA=(btVector3 const&)(*linvelA);
	btVector3 const& c_arg_angvelA=(btVector3 const&)(*angvelA);
	btVector3 const& c_arg_rel_posA1=(btVector3 const&)(*rel_posA1);
	btVector3 const& c_arg_invInertiaBDiag=(btVector3 const&)(*invInertiaBDiag);
	btScalar const c_arg_invMassB=invMassB;
	btVector3 const& c_arg_linvelB=(btVector3 const&)(*linvelB);
	btVector3 const& c_arg_angvelB=(btVector3 const&)(*angvelB);
	btVector3 const& c_arg_rel_posA2=(btVector3 const&)(*rel_posA2);
	btScalar c_arg_depthA=depthA;
	btVector3 const& c_arg_normalA=(btVector3 const&)(*normalA);
	btVector3 const& c_arg_rel_posB1=(btVector3 const&)(*rel_posB1);
	btVector3 const& c_arg_rel_posB2=(btVector3 const&)(*rel_posB2);
	btScalar c_arg_depthB=depthB;
	btVector3 const& c_arg_normalB=(btVector3 const&)(*normalB);
	btScalar& c_arg_imp0=(btScalar&)(*imp0);
	btScalar& c_arg_imp1=(btScalar&)(*imp1);
	c_this->resolveUnilateralPairConstraint(c_arg_body0,c_arg_body1,c_arg_world2A,c_arg_world2B,c_arg_invInertiaADiag,c_arg_invMassA,c_arg_linvelA,c_arg_angvelA,c_arg_rel_posA1,c_arg_invInertiaBDiag,c_arg_invMassB,c_arg_linvelB,c_arg_angvelB,c_arg_rel_posA2,c_arg_depthA,c_arg_normalA,c_arg_rel_posB1,c_arg_rel_posB2,c_arg_depthB,c_arg_normalB,c_arg_imp0,c_arg_imp1);
}

#ifdef __cplusplus
}
#endif
